package com.wooming.myserver.controller;

import com.wooming.myserver.dto.HumanResourceSureDTO;
import com.wooming.myserver.dto.JwtDTO;
import com.wooming.myserver.entity.HumanResource;
import com.wooming.myserver.service.inter.HumanResourceService;
import com.wooming.myserver.util.ApiObserver;
import com.wooming.myserver.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 人力资源API控制器
 *
 * @author wooming 2025/05/28
 */
@RestController
public class HumanResourceController {

    private final HumanResourceService humanResourceService;

    @Autowired
    public HumanResourceController(HumanResourceService humanResourceService) {
        this.humanResourceService = humanResourceService;
    }

    /**
     * 获取当前人力资源信息
     *
     * @return Result<?> 返回全部人力资源信息
     */
    @GetMapping("api/hr/get")
    public Result<?> get() {
        // 监控API调用
        Result<?> result = ApiObserver.observe("获取人力资源信息");
        if (result.getCode() != 200) return result;

        // 获取认证信息
        JwtDTO jwtDTO = (JwtDTO) result.getData();

        // 获取当前用户人力资源信息
        return Result.success(humanResourceService.getByUserId(jwtDTO.getSub()));
    }

    /**
     * 随机生成多个人力资源信息,供用户选择
     *
     * @return Result<?> 随机生成的多个人力资源信息
     */
    @GetMapping("api/hr/random")
    public Result<?> random() {
        // 监控API调用
        Result<?> result = ApiObserver.observe("获取随机人力资源信息");
        if (result.getCode() != 200) return result;

        // 获取认证信息
        JwtDTO jwtDTO = (JwtDTO) result.getData();

        // 获取生成的可选人力资源信息
        List<HumanResource> data = humanResourceService.generate(jwtDTO.getSub(), jwtDTO.getStage());
        if (data == null) return Result.error(400,"资金不足");

        // 返回结果
        return Result.success(data);
    }

    /**
     * 确认选择,要求命名和唯一标识
     *
     * @param humanResourceSureDTO 确认选择的人力资源信息
     * @return Result<?> 确认选择的结果
     */
    @PostMapping("api/hr/sure")
    public Result<?> sure(@RequestBody HumanResourceSureDTO humanResourceSureDTO) {
        // 监控API调用
        Result<?> result = ApiObserver.observe("确定人力资源信息");
        if (result.getCode() != 200) return result;

        // 获取认证信息
        JwtDTO jwtDTO = (JwtDTO) result.getData();

        // 构建完整的HRSureDTO信息
        humanResourceSureDTO.setUserId(jwtDTO.getSub());

        // 确认选择并返回结果
        if (humanResourceService.sureHumanResource(humanResourceSureDTO)) {
            return Result.success("人员已就位");
        } else {
            return Result.error(400, "资金不足");
        }
    }

    /**
     * 升级人力资源
     *
     * @param id 人力资源ID
     * @return Result<?> 升级结果
     */
    @PostMapping("api/hr/levelUp")
    public Result<?> levelUp(@RequestParam("id") Integer id) {
        // 监控API调用
        Result<?> result = ApiObserver.observe("人力资源升级");
        if (result.getCode() != 200) return result;

        // 获取认证信息
        JwtDTO jwtDTO = (JwtDTO) result.getData();

        // 升级并返回结果
        if (humanResourceService.levelUp(jwtDTO.getSub(), id)) {
            return Result.success("升级成功");
        } else {
            return Result.error(400, "升级失败");
        }
    }
}
